package com.thread.thread;

/**
 * @author xuejingjing
 * @className RunnbleTest
 * @description 结合有道云笔记第一阶段多线程部分复习
 * @date 2022/11/12/012 11:49
 */
public class RunnbleTest {
    public static void main(String[] args) {
        /**
         * 第一种方式创建Runnable接口的实现类对象
         */
        // 创建第1个线程，执行相同的任务
        new Thread(new MyRunnable(),"线程1").start();
       // 创建第2个线程。执行相同的任务
        new Thread(new MyRunnable(),"线程2").start();
        // 创建第3个线程。执行相同的任务
        new Thread(new MyRunnable(),"线程3").start();
        // 创建第4个线程。执行相同的任务
        new Thread(new MyRunnable(),"线程4").start();
        // 创建第5个线程。执行相同的任务
        new Thread(new MyRunnable(),"线程5").start();
        // 上面这种创建线程的方法太繁琐，复杂
        /*****************第一种方式结束***************************/

        /**
         * 第二种方式:匿名内部类创建线程的实现类对象
         */
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                for (int i = 1; i <= 10; i++) {
                    System.out.println(Thread.currentThread().getName() + "..." + i);
                }
            }
        };
        // 创建多个线程,执行这个任务
        new Thread(runnable,"线程1").start();
        new Thread(runnable,"线程2").start();
        new Thread(runnable,"线程3").start();
        /*****************第二种方式结束***************************/
// 结论：当你new一个接口的时候，重写的接口里面的抽象方法，这个整体就是他的一个实现类、
        /**
         * lambal表达式
         * 作用就是为了简化匿名内部类的写法
         * 格式：一些参数，一个箭头，一段代码
         * (参数类型 参数名，参数类型 参数名,...) -> {代码语句}
         */
        Runnable runnable1 = () -> {
            for (int i = 1; i <= 10; i++) {
                System.out.println(Thread.currentThread().getName() + "..." + i);
            }
        };   // 创建多个线程,执行这个任务
        new Thread(runnable1,"线程1").start();
        new Thread(runnable1,"线程2").start();
        new Thread(runnable1,"线程3").start();
    }

}
